<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>Document</title>
</head>
<body>
    <script>
        //x--10--9--8--7  y--20--21--22  z--30   fn--0x001  f--0x002
        // var x = 10,
        //     y = 20,
        //     z = 30;
        // function fn() {
        //     y++;
        //     return function (z) {//0x002   0x003  0x002
        //         //z--40    z--50   z--60
        //         x--;
        //         console.log(z + x + y);//40+9+21=70  50+8+22=80
        //         // 60+7+22=89
        //     }
        // }
        // var f = fn();
        // f(40);//0x002(40)---70
        // fn()(50);//0x001()(50)  0x003(50)  ---80
        // f(60);//0x002(60)---89
        // console.log(x,y,z);//7,22,30


        //https://blog.csdn.net/lunahaijiao/article/details/120108361
        //1. function 声明 foo--und
        // {//2.变量提升 声明+赋值 foo--0x001--0x002
        //     function foo() {}//0x001 分隔线 GO--0x002 私有--0x002
        //     foo = 1;//私有 foo--1
        //     function foo() {}//0x002 分隔线 GO--1  私有--1
        //     console.log(foo);
        // }
        // console.log(foo);//1

        // var test = (function (i) {//0x001
        //     //i--2
        //     return function () {//0x002
        //         //i=i*2  2*2---4
        //         alert(i *= 2);
        //     }
        // })(2);
        // test(5);//0x002--4

        // //VO(G) a--1  obj--0x001  fn--0x002
        // //GO
        // let a=1;
        // let obj={
        //     a:2,
        //     fn:function () {//0x002
        //         console.log(this.a)//2
        //     }
        // };
        // let fn = obj.fn;
        // obj.fn();//this--obj   2
        // fn();//this--window    undefined

        // x--2--4--16  y--0x001  m--0x002
        // var x=2;
        // var y={
        //     x:3,//15
        //     z:(function(x){
        //         //x--2--4--7
        //         //this--window
        //         this.x*=x;//window.x=window.x*x; 2*2--4
        //         x+=2;//x=x+2 2+2==4
        //         return function(n){//0x002
        //             //n---4                 n--5
        //             //this--window          this--y
        //             this.x*=n;//window.x=window.x*4---16    obj.x=obj.x * 5--15
        //             x+=3;//x=x+3 4+3--7    x=x+3==10
        //             console.log(x);//7   10
        //         }
        //     })(x)
        // };
        // var m=y.z;
        // m(4);//0x002(4)----7
        // y.z(5);//  10
        // console.log(x, y.x);//16  15

        // let obj = {
        //     name:'zf',
        //     age:12,
        //     b:2
        // };
        // let {age=10,name='zhufeng',bb=22} = obj;
        // console.log(age,name,bb);//12 'zf' 22

        // function Person() {
        //     //私有
        //     this.name = 'zhufeng';
        // }
        // Person.prototype.getName = function () {
        //     console.log(this.name);
        //     console.log(this.age);
        // };
        // Person.prototype.age = 5000;
        // var per1 = new Person();


        // per1.getName();//this--per1  'zhufeng' 5000
        // per1.age = 9;//per1实例添加私有属性 age-->9
        // per1.getName();//this-->per1  'zhufeng'  9
        // console.log(per1.age);//9

        // var per2 = new Person();
        // console.log(per2.age);//5000
    </script>
</body>
</html>